{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this example we will see how to use MiniSom to cluster the iris dataset.\n",
    "\n",
    "First, let's load the data and train our SOM:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\r",
      " [   0 / 500 ]   0% - ? it/s\r",
      " [   0 / 500 ]   0% - ? it/s\r",
      " [   1 / 500 ]   0% - 0:00:00 left \r",
      " [   2 / 500 ]   0% - 0:00:00 left \r",
      " [   3 / 500 ]   1% - 0:00:00 left \r",
      " [   4 / 500 ]   1% - 0:00:00 left \r",
      " [   5 / 500 ]   1% - 0:00:00 left \r",
      " [   6 / 500 ]   1% - 0:00:00 left \r",
      " [   7 / 500 ]   1% - 0:00:00 left \r",
      " [   8 / 500 ]   2% - 0:00:00 left \r",
      " [   9 / 500 ]   2% - 0:00:00 left \r",
      " [  10 / 500 ]   2% - 0:00:00 left \r",
      " [  11 / 500 ]   2% - 0:00:00 left \r",
      " [  12 / 500 ]   2% - 0:00:00 left \r",
      " [  13 / 500 ]   3% - 0:00:00 left \r",
      " [  14 / 500 ]   3% - 0:00:00 left \r",
      " [  15 / 500 ]   3% - 0:00:00 left \r",
      " [  16 / 500 ]   3% - 0:00:00 left \r",
      " [  17 / 500 ]   3% - 0:00:00 left \r",
      " [  18 / 500 ]   4% - 0:00:00 left \r",
      " [  19 / 500 ]   4% - 0:00:00 left \r",
      " [  20 / 500 ]   4% - 0:00:00 left \r",
      " [  21 / 500 ]   4% - 0:00:00 left \r",
      " [  22 / 500 ]   4% - 0:00:00 left \r",
      " [  23 / 500 ]   5% - 0:00:00 left \r",
      " [  24 / 500 ]   5% - 0:00:00 left \r",
      " [  25 / 500 ]   5% - 0:00:00 left \r",
      " [  26 / 500 ]   5% - 0:00:00 left \r",
      " [  27 / 500 ]   5% - 0:00:00 left \r",
      " [  28 / 500 ]   6% - 0:00:00 left \r",
      " [  29 / 500 ]   6% - 0:00:00 left \r",
      " [  30 / 500 ]   6% - 0:00:00 left \r",
      " [  31 / 500 ]   6% - 0:00:00 left \r",
      " [  32 / 500 ]   6% - 0:00:00 left \r",
      " [  33 / 500 ]   7% - 0:00:00 left \r",
      " [  34 / 500 ]   7% - 0:00:00 left \r",
      " [  35 / 500 ]   7% - 0:00:00 left \r",
      " [  36 / 500 ]   7% - 0:00:00 left \r",
      " [  37 / 500 ]   7% - 0:00:00 left \r",
      " [  38 / 500 ]   8% - 0:00:00 left \r",
      " [  39 / 500 ]   8% - 0:00:00 left \r",
      " [  40 / 500 ]   8% - 0:00:00 left \r",
      " [  41 / 500 ]   8% - 0:00:00 left \r",
      " [  42 / 500 ]   8% - 0:00:00 left \r",
      " [  43 / 500 ]   9% - 0:00:00 left \r",
      " [  44 / 500 ]   9% - 0:00:00 left \r",
      " [  45 / 500 ]   9% - 0:00:00 left \r",
      " [  46 / 500 ]   9% - 0:00:00 left \r",
      " [  47 / 500 ]   9% - 0:00:00 left \r",
      " [  48 / 500 ]  10% - 0:00:00 left \r",
      " [  49 / 500 ]  10% - 0:00:00 left \r",
      " [  50 / 500 ]  10% - 0:00:00 left \r",
      " [  51 / 500 ]  10% - 0:00:00 left \r",
      " [  52 / 500 ]  10% - 0:00:00 left \r",
      " [  53 / 500 ]  11% - 0:00:00 left \r",
      " [  54 / 500 ]  11% - 0:00:00 left \r",
      " [  55 / 500 ]  11% - 0:00:00 left \r",
      " [  56 / 500 ]  11% - 0:00:00 left \r",
      " [  57 / 500 ]  11% - 0:00:00 left \r",
      " [  58 / 500 ]  12% - 0:00:00 left \r",
      " [  59 / 500 ]  12% - 0:00:00 left \r",
      " [  60 / 500 ]  12% - 0:00:00 left \r",
      " [  61 / 500 ]  12% - 0:00:00 left \r",
      " [  62 / 500 ]  12% - 0:00:00 left \r",
      " [  63 / 500 ]  13% - 0:00:00 left \r",
      " [  64 / 500 ]  13% - 0:00:00 left \r",
      " [  65 / 500 ]  13% - 0:00:00 left \r",
      " [  66 / 500 ]  13% - 0:00:00 left \r",
      " [  67 / 500 ]  13% - 0:00:00 left \r",
      " [  68 / 500 ]  14% - 0:00:00 left \r",
      " [  69 / 500 ]  14% - 0:00:00 left \r",
      " [  70 / 500 ]  14% - 0:00:00 left \r",
      " [  71 / 500 ]  14% - 0:00:00 left \r",
      " [  72 / 500 ]  14% - 0:00:00 left \r",
      " [  73 / 500 ]  15% - 0:00:00 left \r",
      " [  74 / 500 ]  15% - 0:00:00 left \r",
      " [  75 / 500 ]  15% - 0:00:00 left \r",
      " [  76 / 500 ]  15% - 0:00:00 left \r",
      " [  77 / 500 ]  15% - 0:00:00 left \r",
      " [  78 / 500 ]  16% - 0:00:00 left \r",
      " [  79 / 500 ]  16% - 0:00:00 left \r",
      " [  80 / 500 ]  16% - 0:00:00 left \r",
      " [  81 / 500 ]  16% - 0:00:00 left \r",
      " [  82 / 500 ]  16% - 0:00:00 left \r",
      " [  83 / 500 ]  17% - 0:00:00 left \r",
      " [  84 / 500 ]  17% - 0:00:00 left \r",
      " [  85 / 500 ]  17% - 0:00:00 left \r",
      " [  86 / 500 ]  17% - 0:00:00 left \r",
      " [  87 / 500 ]  17% - 0:00:00 left \r",
      " [  88 / 500 ]  18% - 0:00:00 left \r",
      " [  89 / 500 ]  18% - 0:00:00 left \r",
      " [  90 / 500 ]  18% - 0:00:00 left \r",
      " [  91 / 500 ]  18% - 0:00:00 left \r",
      " [  92 / 500 ]  18% - 0:00:00 left \r",
      " [  93 / 500 ]  19% - 0:00:00 left \r",
      " [  94 / 500 ]  19% - 0:00:00 left \r",
      " [  95 / 500 ]  19% - 0:00:00 left \r",
      " [  96 / 500 ]  19% - 0:00:00 left \r",
      " [  97 / 500 ]  19% - 0:00:00 left \r",
      " [  98 / 500 ]  20% - 0:00:00 left \r",
      " [  99 / 500 ]  20% - 0:00:00 left \r",
      " [ 100 / 500 ]  20% - 0:00:00 left \r",
      " [ 101 / 500 ]  20% - 0:00:00 left \r",
      " [ 102 / 500 ]  20% - 0:00:00 left \r",
      " [ 103 / 500 ]  21% - 0:00:00 left \r",
      " [ 104 / 500 ]  21% - 0:00:00 left \r",
      " [ 105 / 500 ]  21% - 0:00:00 left \r",
      " [ 106 / 500 ]  21% - 0:00:00 left \r",
      " [ 107 / 500 ]  21% - 0:00:00 left \r",
      " [ 108 / 500 ]  22% - 0:00:00 left \r",
      " [ 109 / 500 ]  22% - 0:00:00 left \r",
      " [ 110 / 500 ]  22% - 0:00:00 left \r",
      " [ 111 / 500 ]  22% - 0:00:00 left \r",
      " [ 112 / 500 ]  22% - 0:00:00 left \r",
      " [ 113 / 500 ]  23% - 0:00:00 left \r",
      " [ 114 / 500 ]  23% - 0:00:00 left \r",
      " [ 115 / 500 ]  23% - 0:00:00 left \r",
      " [ 116 / 500 ]  23% - 0:00:00 left \r",
      " [ 117 / 500 ]  23% - 0:00:00 left \r",
      " [ 118 / 500 ]  24% - 0:00:00 left \r",
      " [ 119 / 500 ]  24% - 0:00:00 left \r",
      " [ 120 / 500 ]  24% - 0:00:00 left \r",
      " [ 121 / 500 ]  24% - 0:00:00 left \r",
      " [ 122 / 500 ]  24% - 0:00:00 left \r",
      " [ 123 / 500 ]  25% - 0:00:00 left \r",
      " [ 124 / 500 ]  25% - 0:00:00 left \r",
      " [ 125 / 500 ]  25% - 0:00:00 left \r",
      " [ 126 / 500 ]  25% - 0:00:00 left \r",
      " [ 127 / 500 ]  25% - 0:00:00 left \r",
      " [ 128 / 500 ]  26% - 0:00:00 left \r",
      " [ 129 / 500 ]  26% - 0:00:00 left \r",
      " [ 130 / 500 ]  26% - 0:00:00 left \r",
      " [ 131 / 500 ]  26% - 0:00:00 left \r",
      " [ 132 / 500 ]  26% - 0:00:00 left \r",
      " [ 133 / 500 ]  27% - 0:00:00 left \r",
      " [ 134 / 500 ]  27% - 0:00:00 left \r",
      " [ 135 / 500 ]  27% - 0:00:00 left \r",
      " [ 136 / 500 ]  27% - 0:00:00 left \r",
      " [ 137 / 500 ]  27% - 0:00:00 left \r",
      " [ 138 / 500 ]  28% - 0:00:00 left \r",
      " [ 139 / 500 ]  28% - 0:00:00 left \r",
      " [ 140 / 500 ]  28% - 0:00:00 left \r",
      " [ 141 / 500 ]  28% - 0:00:00 left \r",
      " [ 142 / 500 ]  28% - 0:00:00 left \r",
      " [ 143 / 500 ]  29% - 0:00:00 left \r",
      " [ 144 / 500 ]  29% - 0:00:00 left \r",
      " [ 145 / 500 ]  29% - 0:00:00 left \r",
      " [ 146 / 500 ]  29% - 0:00:00 left \r",
      " [ 147 / 500 ]  29% - 0:00:00 left \r",
      " [ 148 / 500 ]  30% - 0:00:00 left \r",
      " [ 149 / 500 ]  30% - 0:00:00 left \r",
      " [ 150 / 500 ]  30% - 0:00:00 left \r",
      " [ 151 / 500 ]  30% - 0:00:00 left \r",
      " [ 152 / 500 ]  30% - 0:00:00 left \r",
      " [ 153 / 500 ]  31% - 0:00:00 left \r",
      " [ 154 / 500 ]  31% - 0:00:00 left \r",
      " [ 155 / 500 ]  31% - 0:00:00 left \r",
      " [ 156 / 500 ]  31% - 0:00:00 left \r",
      " [ 157 / 500 ]  31% - 0:00:00 left \r",
      " [ 158 / 500 ]  32% - 0:00:00 left \r",
      " [ 159 / 500 ]  32% - 0:00:00 left \r",
      " [ 160 / 500 ]  32% - 0:00:00 left \r",
      " [ 161 / 500 ]  32% - 0:00:00 left \r",
      " [ 162 / 500 ]  32% - 0:00:00 left \r",
      " [ 163 / 500 ]  33% - 0:00:00 left \r",
      " [ 164 / 500 ]  33% - 0:00:00 left \r",
      " [ 165 / 500 ]  33% - 0:00:00 left \r",
      " [ 166 / 500 ]  33% - 0:00:00 left \r",
      " [ 167 / 500 ]  33% - 0:00:00 left \r",
      " [ 168 / 500 ]  34% - 0:00:00 left \r",
      " [ 169 / 500 ]  34% - 0:00:00 left \r",
      " [ 170 / 500 ]  34% - 0:00:00 left \r",
      " [ 171 / 500 ]  34% - 0:00:00 left \r",
      " [ 172 / 500 ]  34% - 0:00:00 left \r",
      " [ 173 / 500 ]  35% - 0:00:00 left \r",
      " [ 174 / 500 ]  35% - 0:00:00 left \r",
      " [ 175 / 500 ]  35% - 0:00:00 left \r",
      " [ 176 / 500 ]  35% - 0:00:00 left \r",
      " [ 177 / 500 ]  35% - 0:00:00 left \r",
      " [ 178 / 500 ]  36% - 0:00:00 left \r",
      " [ 179 / 500 ]  36% - 0:00:00 left \r",
      " [ 180 / 500 ]  36% - 0:00:00 left \r",
      " [ 181 / 500 ]  36% - 0:00:00 left \r",
      " [ 182 / 500 ]  36% - 0:00:00 left \r",
      " [ 183 / 500 ]  37% - 0:00:00 left \r",
      " [ 184 / 500 ]  37% - 0:00:00 left \r",
      " [ 185 / 500 ]  37% - 0:00:00 left \r",
      " [ 186 / 500 ]  37% - 0:00:00 left \r",
      " [ 187 / 500 ]  37% - 0:00:00 left \r",
      " [ 188 / 500 ]  38% - 0:00:00 left \r",
      " [ 189 / 500 ]  38% - 0:00:00 left \r",
      " [ 190 / 500 ]  38% - 0:00:00 left \r",
      " [ 191 / 500 ]  38% - 0:00:00 left \r",
      " [ 192 / 500 ]  38% - 0:00:00 left \r",
      " [ 193 / 500 ]  39% - 0:00:00 left \r",
      " [ 194 / 500 ]  39% - 0:00:00 left \r",
      " [ 195 / 500 ]  39% - 0:00:00 left \r",
      " [ 196 / 500 ]  39% - 0:00:00 left \r",
      " [ 197 / 500 ]  39% - 0:00:00 left \r",
      " [ 198 / 500 ]  40% - 0:00:00 left \r",
      " [ 199 / 500 ]  40% - 0:00:00 left \r",
      " [ 200 / 500 ]  40% - 0:00:00 left \r",
      " [ 201 / 500 ]  40% - 0:00:00 left \r",
      " [ 202 / 500 ]  40% - 0:00:00 left \r",
      " [ 203 / 500 ]  41% - 0:00:00 left \r",
      " [ 204 / 500 ]  41% - 0:00:00 left \r",
      " [ 205 / 500 ]  41% - 0:00:00 left \r",
      " [ 206 / 500 ]  41% - 0:00:00 left \r",
      " [ 207 / 500 ]  41% - 0:00:00 left \r",
      " [ 208 / 500 ]  42% - 0:00:00 left \r",
      " [ 209 / 500 ]  42% - 0:00:00 left \r",
      " [ 210 / 500 ]  42% - 0:00:00 left \r",
      " [ 211 / 500 ]  42% - 0:00:00 left \r",
      " [ 212 / 500 ]  42% - 0:00:00 left \r",
      " [ 213 / 500 ]  43% - 0:00:00 left \r",
      " [ 214 / 500 ]  43% - 0:00:00 left \r",
      " [ 215 / 500 ]  43% - 0:00:00 left \r",
      " [ 216 / 500 ]  43% - 0:00:00 left \r",
      " [ 217 / 500 ]  43% - 0:00:00 left \r",
      " [ 218 / 500 ]  44% - 0:00:00 left \r",
      " [ 219 / 500 ]  44% - 0:00:00 left \r",
      " [ 220 / 500 ]  44% - 0:00:00 left \r",
      " [ 221 / 500 ]  44% - 0:00:00 left \r",
      " [ 222 / 500 ]  44% - 0:00:00 left \r",
      " [ 223 / 500 ]  45% - 0:00:00 left \r",
      " [ 224 / 500 ]  45% - 0:00:00 left \r",
      " [ 225 / 500 ]  45% - 0:00:00 left \r",
      " [ 226 / 500 ]  45% - 0:00:00 left \r",
      " [ 227 / 500 ]  45% - 0:00:00 left \r",
      " [ 228 / 500 ]  46% - 0:00:00 left \r",
      " [ 229 / 500 ]  46% - 0:00:00 left \r",
      " [ 230 / 500 ]  46% - 0:00:00 left \r",
      " [ 231 / 500 ]  46% - 0:00:00 left \r",
      " [ 232 / 500 ]  46% - 0:00:00 left \r",
      " [ 233 / 500 ]  47% - 0:00:00 left \r",
      " [ 234 / 500 ]  47% - 0:00:00 left \r",
      " [ 235 / 500 ]  47% - 0:00:00 left \r",
      " [ 236 / 500 ]  47% - 0:00:00 left \r",
      " [ 237 / 500 ]  47% - 0:00:00 left \r",
      " [ 238 / 500 ]  48% - 0:00:00 left \r",
      " [ 239 / 500 ]  48% - 0:00:00 left \r",
      " [ 240 / 500 ]  48% - 0:00:00 left \r",
      " [ 241 / 500 ]  48% - 0:00:00 left \r",
      " [ 242 / 500 ]  48% - 0:00:00 left \r",
      " [ 243 / 500 ]  49% - 0:00:00 left \r",
      " [ 244 / 500 ]  49% - 0:00:00 left \r",
      " [ 245 / 500 ]  49% - 0:00:00 left \r",
      " [ 246 / 500 ]  49% - 0:00:00 left \r",
      " [ 247 / 500 ]  49% - 0:00:00 left \r",
      " [ 248 / 500 ]  50% - 0:00:00 left \r",
      " [ 249 / 500 ]  50% - 0:00:00 left \r",
      " [ 250 / 500 ]  50% - 0:00:00 left \r",
      " [ 251 / 500 ]  50% - 0:00:00 left \r",
      " [ 252 / 500 ]  50% - 0:00:00 left \r",
      " [ 253 / 500 ]  51% - 0:00:00 left \r",
      " [ 254 / 500 ]  51% - 0:00:00 left \r",
      " [ 255 / 500 ]  51% - 0:00:00 left \r",
      " [ 256 / 500 ]  51% - 0:00:00 left \r",
      " [ 257 / 500 ]  51% - 0:00:00 left \r",
      " [ 258 / 500 ]  52% - 0:00:00 left \r",
      " [ 259 / 500 ]  52% - 0:00:00 left \r",
      " [ 260 / 500 ]  52% - 0:00:00 left \r",
      " [ 261 / 500 ]  52% - 0:00:00 left \r",
      " [ 262 / 500 ]  52% - 0:00:00 left \r",
      " [ 263 / 500 ]  53% - 0:00:00 left \r",
      " [ 264 / 500 ]  53% - 0:00:00 left \r",
      " [ 265 / 500 ]  53% - 0:00:00 left \r",
      " [ 266 / 500 ]  53% - 0:00:00 left \r",
      " [ 267 / 500 ]  53% - 0:00:00 left \r",
      " [ 268 / 500 ]  54% - 0:00:00 left \r",
      " [ 269 / 500 ]  54% - 0:00:00 left \r",
      " [ 270 / 500 ]  54% - 0:00:00 left \r",
      " [ 271 / 500 ]  54% - 0:00:00 left \r",
      " [ 272 / 500 ]  54% - 0:00:00 left \r",
      " [ 273 / 500 ]  55% - 0:00:00 left \r",
      " [ 274 / 500 ]  55% - 0:00:00 left \r",
      " [ 275 / 500 ]  55% - 0:00:00 left \r",
      " [ 276 / 500 ]  55% - 0:00:00 left \r",
      " [ 277 / 500 ]  55% - 0:00:00 left \r",
      " [ 278 / 500 ]  56% - 0:00:00 left \r",
      " [ 279 / 500 ]  56% - 0:00:00 left \r",
      " [ 280 / 500 ]  56% - 0:00:00 left \r",
      " [ 281 / 500 ]  56% - 0:00:00 left \r",
      " [ 282 / 500 ]  56% - 0:00:00 left \r",
      " [ 283 / 500 ]  57% - 0:00:00 left \r",
      " [ 284 / 500 ]  57% - 0:00:00 left \r",
      " [ 285 / 500 ]  57% - 0:00:00 left \r",
      " [ 286 / 500 ]  57% - 0:00:00 left \r",
      " [ 287 / 500 ]  57% - 0:00:00 left \r",
      " [ 288 / 500 ]  58% - 0:00:00 left \r",
      " [ 289 / 500 ]  58% - 0:00:00 left \r",
      " [ 290 / 500 ]  58% - 0:00:00 left \r",
      " [ 291 / 500 ]  58% - 0:00:00 left \r",
      " [ 292 / 500 ]  58% - 0:00:00 left \r",
      " [ 293 / 500 ]  59% - 0:00:00 left \r",
      " [ 294 / 500 ]  59% - 0:00:00 left \r",
      " [ 295 / 500 ]  59% - 0:00:00 left \r",
      " [ 296 / 500 ]  59% - 0:00:00 left \r",
      " [ 297 / 500 ]  59% - 0:00:00 left \r",
      " [ 298 / 500 ]  60% - 0:00:00 left \r",
      " [ 299 / 500 ]  60% - 0:00:00 left \r",
      " [ 300 / 500 ]  60% - 0:00:00 left \r",
      " [ 301 / 500 ]  60% - 0:00:00 left \r",
      " [ 302 / 500 ]  60% - 0:00:00 left \r",
      " [ 303 / 500 ]  61% - 0:00:00 left \r",
      " [ 304 / 500 ]  61% - 0:00:00 left \r",
      " [ 305 / 500 ]  61% - 0:00:00 left \r",
      " [ 306 / 500 ]  61% - 0:00:00 left \r",
      " [ 307 / 500 ]  61% - 0:00:00 left \r",
      " [ 308 / 500 ]  62% - 0:00:00 left \r",
      " [ 309 / 500 ]  62% - 0:00:00 left \r",
      " [ 310 / 500 ]  62% - 0:00:00 left \r",
      " [ 311 / 500 ]  62% - 0:00:00 left \r",
      " [ 312 / 500 ]  62% - 0:00:00 left \r",
      " [ 313 / 500 ]  63% - 0:00:00 left \r",
      " [ 314 / 500 ]  63% - 0:00:00 left \r",
      " [ 315 / 500 ]  63% - 0:00:00 left \r",
      " [ 316 / 500 ]  63% - 0:00:00 left \r",
      " [ 317 / 500 ]  63% - 0:00:00 left \r",
      " [ 318 / 500 ]  64% - 0:00:00 left \r",
      " [ 319 / 500 ]  64% - 0:00:00 left \r",
      " [ 320 / 500 ]  64% - 0:00:00 left \r",
      " [ 321 / 500 ]  64% - 0:00:00 left \r",
      " [ 322 / 500 ]  64% - 0:00:00 left \r",
      " [ 323 / 500 ]  65% - 0:00:00 left \r",
      " [ 324 / 500 ]  65% - 0:00:00 left \r",
      " [ 325 / 500 ]  65% - 0:00:00 left \r",
      " [ 326 / 500 ]  65% - 0:00:00 left \r",
      " [ 327 / 500 ]  65% - 0:00:00 left \r",
      " [ 328 / 500 ]  66% - 0:00:00 left \r",
      " [ 329 / 500 ]  66% - 0:00:00 left \r",
      " [ 330 / 500 ]  66% - 0:00:00 left \r",
      " [ 331 / 500 ]  66% - 0:00:00 left \r",
      " [ 332 / 500 ]  66% - 0:00:00 left \r",
      " [ 333 / 500 ]  67% - 0:00:00 left \r",
      " [ 334 / 500 ]  67% - 0:00:00 left \r",
      " [ 335 / 500 ]  67% - 0:00:00 left \r",
      " [ 336 / 500 ]  67% - 0:00:00 left \r",
      " [ 337 / 500 ]  67% - 0:00:00 left \r",
      " [ 338 / 500 ]  68% - 0:00:00 left \r",
      " [ 339 / 500 ]  68% - 0:00:00 left \r",
      " [ 340 / 500 ]  68% - 0:00:00 left \r",
      " [ 341 / 500 ]  68% - 0:00:00 left \r",
      " [ 342 / 500 ]  68% - 0:00:00 left \r",
      " [ 343 / 500 ]  69% - 0:00:00 left \r",
      " [ 344 / 500 ]  69% - 0:00:00 left \r",
      " [ 345 / 500 ]  69% - 0:00:00 left \r",
      " [ 346 / 500 ]  69% - 0:00:00 left \r",
      " [ 347 / 500 ]  69% - 0:00:00 left \r",
      " [ 348 / 500 ]  70% - 0:00:00 left \r",
      " [ 349 / 500 ]  70% - 0:00:00 left \r",
      " [ 350 / 500 ]  70% - 0:00:00 left \r",
      " [ 351 / 500 ]  70% - 0:00:00 left \r",
      " [ 352 / 500 ]  70% - 0:00:00 left \r",
      " [ 353 / 500 ]  71% - 0:00:00 left \r",
      " [ 354 / 500 ]  71% - 0:00:00 left \r",
      " [ 355 / 500 ]  71% - 0:00:00 left \r",
      " [ 356 / 500 ]  71% - 0:00:00 left \r",
      " [ 357 / 500 ]  71% - 0:00:00 left \r",
      " [ 358 / 500 ]  72% - 0:00:00 left \r",
      " [ 359 / 500 ]  72% - 0:00:00 left \r",
      " [ 360 / 500 ]  72% - 0:00:00 left \r",
      " [ 361 / 500 ]  72% - 0:00:00 left \r",
      " [ 362 / 500 ]  72% - 0:00:00 left \r",
      " [ 363 / 500 ]  73% - 0:00:00 left \r",
      " [ 364 / 500 ]  73% - 0:00:00 left \r",
      " [ 365 / 500 ]  73% - 0:00:00 left \r",
      " [ 366 / 500 ]  73% - 0:00:00 left \r",
      " [ 367 / 500 ]  73% - 0:00:00 left \r",
      " [ 368 / 500 ]  74% - 0:00:00 left \r",
      " [ 369 / 500 ]  74% - 0:00:00 left \r",
      " [ 370 / 500 ]  74% - 0:00:00 left \r",
      " [ 371 / 500 ]  74% - 0:00:00 left \r",
      " [ 372 / 500 ]  74% - 0:00:00 left \r",
      " [ 373 / 500 ]  75% - 0:00:00 left \r",
      " [ 374 / 500 ]  75% - 0:00:00 left \r",
      " [ 375 / 500 ]  75% - 0:00:00 left \r",
      " [ 376 / 500 ]  75% - 0:00:00 left \r",
      " [ 377 / 500 ]  75% - 0:00:00 left \r",
      " [ 378 / 500 ]  76% - 0:00:00 left \r",
      " [ 379 / 500 ]  76% - 0:00:00 left \r",
      " [ 380 / 500 ]  76% - 0:00:00 left \r",
      " [ 381 / 500 ]  76% - 0:00:00 left \r",
      " [ 382 / 500 ]  76% - 0:00:00 left \r",
      " [ 383 / 500 ]  77% - 0:00:00 left \r",
      " [ 384 / 500 ]  77% - 0:00:00 left \r",
      " [ 385 / 500 ]  77% - 0:00:00 left \r",
      " [ 386 / 500 ]  77% - 0:00:00 left \r",
      " [ 387 / 500 ]  77% - 0:00:00 left \r",
      " [ 388 / 500 ]  78% - 0:00:00 left \r",
      " [ 389 / 500 ]  78% - 0:00:00 left \r",
      " [ 390 / 500 ]  78% - 0:00:00 left \r",
      " [ 391 / 500 ]  78% - 0:00:00 left \r",
      " [ 392 / 500 ]  78% - 0:00:00 left \r",
      " [ 393 / 500 ]  79% - 0:00:00 left \r",
      " [ 394 / 500 ]  79% - 0:00:00 left \r",
      " [ 395 / 500 ]  79% - 0:00:00 left \r",
      " [ 396 / 500 ]  79% - 0:00:00 left \r",
      " [ 397 / 500 ]  79% - 0:00:00 left \r",
      " [ 398 / 500 ]  80% - 0:00:00 left \r",
      " [ 399 / 500 ]  80% - 0:00:00 left \r",
      " [ 400 / 500 ]  80% - 0:00:00 left \r",
      " [ 401 / 500 ]  80% - 0:00:00 left \r",
      " [ 402 / 500 ]  80% - 0:00:00 left \r",
      " [ 403 / 500 ]  81% - 0:00:00 left \r",
      " [ 404 / 500 ]  81% - 0:00:00 left \r",
      " [ 405 / 500 ]  81% - 0:00:00 left \r",
      " [ 406 / 500 ]  81% - 0:00:00 left \r",
      " [ 407 / 500 ]  81% - 0:00:00 left \r",
      " [ 408 / 500 ]  82% - 0:00:00 left \r",
      " [ 409 / 500 ]  82% - 0:00:00 left \r",
      " [ 410 / 500 ]  82% - 0:00:00 left \r",
      " [ 411 / 500 ]  82% - 0:00:00 left \r",
      " [ 412 / 500 ]  82% - 0:00:00 left \r",
      " [ 413 / 500 ]  83% - 0:00:00 left \r",
      " [ 414 / 500 ]  83% - 0:00:00 left \r",
      " [ 415 / 500 ]  83% - 0:00:00 left \r",
      " [ 416 / 500 ]  83% - 0:00:00 left \r",
      " [ 417 / 500 ]  83% - 0:00:00 left \r",
      " [ 418 / 500 ]  84% - 0:00:00 left \r",
      " [ 419 / 500 ]  84% - 0:00:00 left \r",
      " [ 420 / 500 ]  84% - 0:00:00 left \r",
      " [ 421 / 500 ]  84% - 0:00:00 left \r",
      " [ 422 / 500 ]  84% - 0:00:00 left \r",
      " [ 423 / 500 ]  85% - 0:00:00 left \r",
      " [ 424 / 500 ]  85% - 0:00:00 left \r",
      " [ 425 / 500 ]  85% - 0:00:00 left \r",
      " [ 426 / 500 ]  85% - 0:00:00 left \r",
      " [ 427 / 500 ]  85% - 0:00:00 left \r",
      " [ 428 / 500 ]  86% - 0:00:00 left \r",
      " [ 429 / 500 ]  86% - 0:00:00 left \r",
      " [ 430 / 500 ]  86% - 0:00:00 left \r",
      " [ 431 / 500 ]  86% - 0:00:00 left \r",
      " [ 432 / 500 ]  86% - 0:00:00 left \r",
      " [ 433 / 500 ]  87% - 0:00:00 left \r",
      " [ 434 / 500 ]  87% - 0:00:00 left \r",
      " [ 435 / 500 ]  87% - 0:00:00 left \r",
      " [ 436 / 500 ]  87% - 0:00:00 left \r",
      " [ 437 / 500 ]  87% - 0:00:00 left \r",
      " [ 438 / 500 ]  88% - 0:00:00 left \r",
      " [ 439 / 500 ]  88% - 0:00:00 left \r",
      " [ 440 / 500 ]  88% - 0:00:00 left \r",
      " [ 441 / 500 ]  88% - 0:00:00 left \r",
      " [ 442 / 500 ]  88% - 0:00:00 left \r",
      " [ 443 / 500 ]  89% - 0:00:00 left \r",
      " [ 444 / 500 ]  89% - 0:00:00 left \r",
      " [ 445 / 500 ]  89% - 0:00:00 left \r",
      " [ 446 / 500 ]  89% - 0:00:00 left \r",
      " [ 447 / 500 ]  89% - 0:00:00 left \r",
      " [ 448 / 500 ]  90% - 0:00:00 left \r",
      " [ 449 / 500 ]  90% - 0:00:00 left \r",
      " [ 450 / 500 ]  90% - 0:00:00 left \r",
      " [ 451 / 500 ]  90% - 0:00:00 left \r",
      " [ 452 / 500 ]  90% - 0:00:00 left \r",
      " [ 453 / 500 ]  91% - 0:00:00 left \r",
      " [ 454 / 500 ]  91% - 0:00:00 left \r",
      " [ 455 / 500 ]  91% - 0:00:00 left \r",
      " [ 456 / 500 ]  91% - 0:00:00 left \r",
      " [ 457 / 500 ]  91% - 0:00:00 left \r",
      " [ 458 / 500 ]  92% - 0:00:00 left \r",
      " [ 459 / 500 ]  92% - 0:00:00 left \r",
      " [ 460 / 500 ]  92% - 0:00:00 left \r",
      " [ 461 / 500 ]  92% - 0:00:00 left \r",
      " [ 462 / 500 ]  92% - 0:00:00 left \r",
      " [ 463 / 500 ]  93% - 0:00:00 left \r",
      " [ 464 / 500 ]  93% - 0:00:00 left \r",
      " [ 465 / 500 ]  93% - 0:00:00 left \r",
      " [ 466 / 500 ]  93% - 0:00:00 left \r",
      " [ 467 / 500 ]  93% - 0:00:00 left \r",
      " [ 468 / 500 ]  94% - 0:00:00 left \r",
      " [ 469 / 500 ]  94% - 0:00:00 left \r",
      " [ 470 / 500 ]  94% - 0:00:00 left \r",
      " [ 471 / 500 ]  94% - 0:00:00 left \r",
      " [ 472 / 500 ]  94% - 0:00:00 left \r",
      " [ 473 / 500 ]  95% - 0:00:00 left \r",
      " [ 474 / 500 ]  95% - 0:00:00 left \r",
      " [ 475 / 500 ]  95% - 0:00:00 left \r",
      " [ 476 / 500 ]  95% - 0:00:00 left \r",
      " [ 477 / 500 ]  95% - 0:00:00 left \r",
      " [ 478 / 500 ]  96% - 0:00:00 left \r",
      " [ 479 / 500 ]  96% - 0:00:00 left \r",
      " [ 480 / 500 ]  96% - 0:00:00 left \r",
      " [ 481 / 500 ]  96% - 0:00:00 left \r",
      " [ 482 / 500 ]  96% - 0:00:00 left \r",
      " [ 483 / 500 ]  97% - 0:00:00 left \r",
      " [ 484 / 500 ]  97% - 0:00:00 left \r",
      " [ 485 / 500 ]  97% - 0:00:00 left \r",
      " [ 486 / 500 ]  97% - 0:00:00 left \r",
      " [ 487 / 500 ]  97% - 0:00:00 left \r",
      " [ 488 / 500 ]  98% - 0:00:00 left \r",
      " [ 489 / 500 ]  98% - 0:00:00 left \r",
      " [ 490 / 500 ]  98% - 0:00:00 left \r",
      " [ 491 / 500 ]  98% - 0:00:00 left \r",
      " [ 492 / 500 ]  98% - 0:00:00 left \r",
      " [ 493 / 500 ]  99% - 0:00:00 left \r",
      " [ 494 / 500 ]  99% - 0:00:00 left \r",
      " [ 495 / 500 ]  99% - 0:00:00 left \r",
      " [ 496 / 500 ]  99% - 0:00:00 left \r",
      " [ 497 / 500 ]  99% - 0:00:00 left \r",
      " [ 498 / 500 ] 100% - 0:00:00 left \r",
      " [ 499 / 500 ] 100% - 0:00:00 left \r",
      " [ 500 / 500 ] 100% - 0:00:00 left \n",
      " quantization error: 0.864828807271489\n"
     ]
    }
   ],
   "source": [
    "from minisom import MiniSom\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/00236/seeds_dataset.txt', \n",
    "                    names=['area', 'perimeter', 'compactness', 'length_kernel', 'width_kernel',\n",
    "                   'asymmetry_coefficient', 'length_kernel_groove', 'target'], usecols=[0, 5], \n",
    "                   sep='\\t+', engine='python')\n",
    "# data normalization\n",
    "data = (data - np.mean(data, axis=0)) / np.std(data, axis=0)\n",
    "data = data.values\n",
    "\n",
    "# Initialization and training\n",
    "som_shape = (1, 3)\n",
    "som = MiniSom(som_shape[0], som_shape[1], data.shape[1], sigma=.5, learning_rate=.5,\n",
    "              neighborhood_function='gaussian', random_seed=10)\n",
    "\n",
    "som.train_batch(data, 500, verbose=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we will consider all the sample mapped into a specific neuron as a cluster. To identify each cluster more easily we will translate the bidimensional indexes of the neurons on the SOM into a monodimentional indexes:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# each neuron represents a cluster\n",
    "winner_coordinates = np.array([som.winner(x) for x in data]).T\n",
    "# with np.ravel_multi_index we convert the bidimensional\n",
    "# coordinates to a monodimensional index\n",
    "cluster_index = np.ravel_multi_index(winner_coordinates, som_shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can plot each cluster with a different color:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "# plotting the clusters using the first 2 dimentions of the data\n",
    "for c in np.unique(cluster_index):\n",
    "    plt.scatter(data[cluster_index == c, 0],\n",
    "                data[cluster_index == c, 1], label='cluster='+str(c), alpha=.7)\n",
    "\n",
    "# plotting centroids\n",
    "for centroid in som.get_weights():\n",
    "    plt.scatter(centroid[:, 0], centroid[:, 1], marker='x', \n",
    "                s=80, linewidths=35, color='k', label='centroid')\n",
    "plt.legend();"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
